package TCP;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

/**
 * Day06_Client 类实现了客户端与服务器的连接和数据传输。
 * 通过创建一个 Socket 实例连接到服务器，并通过输入流和输出流进行数据的发送和接收。
 */
public class Day06_Client {

    public static void main(String[] args) {
        // 尝试连接服务器并进行数据通信
        try {
            // 获取本地主机地址并建立与服务器的连接
            InetAddress address = InetAddress.getLocalHost();
            Socket socket = new Socket(address, 8888);
            System.out.println("我是客户端，已经连接上服务器！");

            // 进入循环，不断接收用户输入并发送给服务器，同时接收服务器返回的数据
            while (true) {
                System.out.print("请输入内容：");
                // 从标准输入读取用户输入
                InputStream inputStream1 = System.in;
                InputStreamReader inputStreamReader1 = new InputStreamReader(inputStream1);
                BufferedReader bufferedReader1 = new BufferedReader(inputStreamReader1);
                String word = bufferedReader1.readLine();


                // 将用户输入通过输出流发送给服务器
                OutputStream outputStream = socket.getOutputStream();
                DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
                PrintWriter printWriter = new PrintWriter(dataOutputStream, true);
                printWriter.println(word);

                // 从 socket 接收服务器返回的数据
                InputStream inputStream = socket.getInputStream();
                InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
                BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
                String word1 = bufferedReader.readLine();

                // 打印服务器返回的数据
                System.out.println("我是客户端，服务器发送来的数据为：" + word1);
            }

        } catch (UnknownHostException e) {
            // 处理无法解析主机名的异常
            e.printStackTrace();
        } catch (IOException e) {
            // 处理输入输出异常
            e.printStackTrace();
        }

        // 注意：此处有注释掉的 socket.close();，在实际应用中应该在合适的位置关闭 socket 连接
    }

}
